Remix 2015 - of Mike Tyson's Punch-Out!! (prg 1)(u)

(I also tested the patch with a file called 'punchout.nes' and it worked)

The earlier characters I made a little harder. The middle characters are about the same, through Don #2. Sandman + Macho Man are a slightly easier. Mike Tyson is much easier, though it still took me like 10 tries to beat him. Everyone's weaknesses are the same. But, their moves are in different order, making it play alot different. Also, I changed some colors.


What I changed, (in a hex editor) - 

Code for moves... there is a list of pointers loaded into $500-503, directed by a timing code, pointing to a list of move strings that directs the moves within each round. When $311 clicks down to the expected amount (it starts at C0 and goes down to 0C), it loads a pointer to 3b and 3c to load the next move with a ($3b), y (where y is from 3a). There are multiple rom banks, so the moves are all over the place, to be swapped in to 8000-9fff of the nes. Note, the move value is never stored in the RAM. It uses the value to direct the code to the right subroutine.

Example of timing code, Glass Joe, round 1

$141e - the round always start with C0 = 0:00 on the clock
	C0 FF 00 0d 00 ff 20 0d 00 
	ff 20 04 02 ff 60 0d 00 ff 60 02 08 d0 
	98 d3 ff 00 02 04 e2 ba 05 8c 8c 
	--
98 is the first number it's looking for = 0:40 on the clock
you can edit the 98 to change when he starts the next set of moves.
I know this because I set a breakpoint for reads to $311.
	0c e0
	--
0c is the last tick when the clock reaches 3:00
e0 means end of round.


Example of move data, Glass Joe, round 1

$1483 - f1 80 ff 1f 01 (from 0-40 seconds)

The f1 sets something up, not sure what
80 ff means "wait 255" (80 10 = wait 10, etc)
1f 01 - reset the offset (3a) to 01, which repeats the current pattern


$14a6 - 01 99 01 95 f0

01 99 - does move 9, jump back
01 95 - does move 5, hook punch
f0 - i think means 'load the next pointer, reset offset to 0', sometimes found at the end of a string

oddly, it's not always an 01 before a punch, sometimes it's expecting an 04 or a 05 or 08 or 0f. It varies from character to character...i think it has something to do with timing.


---------

Another thing I changed, was the wait period after certain punches. The characters kind of freeze after a punch, for a short period.
At the start of each round, a string of numbers is loaded at $500.

Glass Joe, round 1 = 73 94 9a 94 00 18 81 50 80 ff 80
					  --
That 50 number (ram $507), is how long Glass Joe pauses after a hook punch.
They seem to only set it up easily for 1 move per character.
(The other punches use an indirect method.) Change the 50 to 10, and the pause is very short (making it harder to counter punch him).




----------

Locations in Rom file of various things...

each move string usually starts with $f1 and ends with $1f 01, or sometimes ends with $f0

Glass Joe
$1483 - moves lists start here
$1473 - wait length after some punches

95 - hook punch
96 - straight punch
99 - jumps back


Von Kaiser
$53b8 - moves lists start here
$53a8 - wait length after some punches

96 - punch
97 - uppercut


Piston Honda
$bd81 - moves lists start here
$bd5e - wait length after some punches

97 - uppercut
96 - punch
95 - hook
99 - jump back
98 - fast punch l
9a - fast punch r
9c - wink


Don Flamenco
$1792 - moves lists start here
$176a - wait length after some punches

96 - jab
95 - punch
97 - uppercut
98 - taunt


King Hippo
$2d68 - moves lists start here
$2d5e - wait length after some punches

95 - l punch
96 - r punch
97 - open mouth, l punch
98 - open mouth, r punch
99 - open mouth
9a - hop around


Great Tiger
$553d - moves lists start here
$552f - wait length after some punches

96 - flash jewel, r punch
8f - flash jewel
97 - l uppercut
98 - r uppercut


Bald Bull
$7c6b - moves lists start here
$7c2e - wait length after some punches

95 - hook
96 - jab
97 - duck, uppercut
99 - bull charge
0f 9a - bull charge 2


Piston Honda 2
$bde2 - moves lists start here
$bd73 - wait length after some punches

95 - hook
96 - fast punch
97 - l uppercut
98 - fast punch l
99 - jump back
9a - fast punch r
9c - eyes move
9d - dance, uppercut


Soda Popinski
$9b96 - moves lists start here
(wait not used?)

95 hook r
96 straight punch
97 l uppercut
98 r uppercut
99 ? (doesn't seem to do anything, but is listed once)
9a shuffle feet


Bald Bull 2
$7caf - moves lists start here
$7c48 - wait length after some punches

95 - l punch
96 - r punch
97 - duck, uppercut
99 - taunt
0f 9a - bull charge


Don Flamenco 2
$179f - moves lists start here
$17b2 - moves for Round 1 actually start here
$177f - wait length after some punches

96 - r jab
97 - l hook
97 - uppercut
98 - taunt


Mr Sandman
$7e63 - moves lists start here
$7e4c - wait length after some punches

95 - l hook
96 - r jab
97 - duck, uppercut
98 - l jab
99 - l jab (seems the same as 98)
9a - fast uppercut (faces left)
9b - fast uppercut (faces right)
9c - r hook
9d - fast uppercut (faces r, and you can counter punch)
9f - flash, then fast uppercut r


Super Macho Man
$99c4 - moves lists start here
(wait not used?)

95 - l hook
97 - l uppercut
98 - r uppercut
0f 99 - spin punch
0f 9a - super spin punch
9b - duck, dance, punch


Mike Tyson
$b9b1 - moves lists start here
(wait not used?)

95 - wink, l punch
96 - r punch + wink
97 - fast uppercut (ko) l
98 - fast punch l (soft)
99 - blink alot
9a - fast punch r (soft)
9c - wink, r punch
9d - fast uppercut (ko) r


*note, you can try other numbers for each character. 90-9a usually do something, if just make him look stunned for a second. Or, just raise his hand like he just won the match. Other times, it crashes the game, if an unexpected number. I haven't figured out everything yet.


At the start of each round, the color palette is loaded into the RAM at $480-49f. They use #$8f for black. Watch which string is loaded for each character, search the ROM for that string, and you can change it. The first 16 for the Top of screen, Mario, and Little Mac. The second 16 for the opponent. (little mac is rendered as background, by the way, with the scroll shifted mid-frame to make him move). Changing the black around Little Mac is a little trickier, since the code sets it to black in several places, like after you lose hearts and regain them.



Another thing, in order to stare at the ram and not pay attention to the game, I set $76 and $77 to ff (255). This tricks the game into thinking you are perfectly dodging all punches. It doesn't work well for Don Flamingo, who requires you to hit him for him to punch. Or Tiger, who requires you to block 5 times. Or Bald Bull, who repeatedly does his charge until you hit him.

And setting location $01 in ram changes the opponent (00 - glass joe, 01 - von kaiser, etc).

And, here's an interesting one. $4b in ram, is how many times you can hit him while he's stunned. If set it to 2 with a cheat code, you can continually punch the opponent until he is knocked out. It makes Mike Tyson SOOO much easier to beat. If you set a breakpoint on $4b (debugger), you can find the original location of the 'how many times can i punch while stunned' number, and modify it.

Also, you can maintain full health with putting $60 (96) in $391, defends against most hits.




I'm expecting someone else out there to use this and make some more versions of Mike Tyson.

-dougeff


